package com.wanjl.aop.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @author WanJl
 * @version 1.0
 * @title TeaServiceSaveUpdateAspect
 * @description
 * @create 2024/11/3
 */
//1、交给IOC容器管理
@Component
//2、设置当前类为切面类
@Aspect
public class TeaServiceSaveAspect {

    //3、设置切入点方法
    /*
        execution(void com.wanjl.aop.service.TeaService.save()) : 切入点表达式
        切入点表达式的标准格式：
        execution(访问修饰符 返回值类型 包名.类名.方法名(参数类型) 异常名)
        访问修饰符：可以省略
        异常名：可以省略
        切入点表达式通配符：
            * :表示单个独立的任意符号，可以单独出现，也可以作为前缀或后缀的匹配符出现
            execution(public * com.wanjl.*.service.impl.TeaServiceImpl.save(*))
            .. :多个连续的任意符号，可以单独出现，一般用来简化包名或参数的书写
            execution(public void com..TeaServiceImpl.save(..))
            + :专门用来匹配子类类型的
            execution(* com.wanjl.*..*Service+.save(..)   任意访问级别，任意返回值类型，com.wanjl包下的任意包中的
            带有Service类的子类里的save方法，无论该方法是否有参数列表。

            execution(* *..*.*.*(..))
     */
    @Pointcut("execution(void com.wanjl.aop.service.*Service.save())")
    //@Pointcut("execution(* *..*.*.*())")
    private void pt(){}


    //4、设置在切入点的前面运行哪些操作
    @Before("pt()")
    public void beforeMethod(){
        System.out.println("磨刀......");
    }

}
